/**
 * 利用装饰器 实现延迟执行
 */

{
	/**
	 * 代码很简单 和上一课处理的逻辑几乎是一样的
	 *  先存储一下这个方法  之后设置延时器执行方法
	 */
	const SleepDecorator: MethodDecorator = (
		target: Object,
		propertyKey: string | symbol,
		descriptor: PropertyDescriptor
	) => {
		let method = descriptor.value
		descriptor.value = () => {
			setTimeout(() => {
				method()
			}, 2000)
		}
	}

	class User {
		@SleepDecorator
		public code(): void {
			console.log('code!!!!')
		}
	}

	new User().code()
}
